/*************************************************************************
                           Reseau  -  description
                             -------------------

*************************************************************************/

//---------- Rélisation de la classe <algo_gen> (fichier algo_gen.cpp) --

//---------------------------------------------------------------- INCLUDE

//-------------------------------------------------------- Include système
#include <math.h>
#include <time.h>
#include <stdlib.h>

#include <iostream>
using namespace std;

//------------------------------------------------------ Include personnel
#include "NormalDistribution.h"

//------------------------------------------------------------- Constantes
const double PI = 3.1415926535;
//----------------------------------------------------------------- PUBLIC

//----------------------------------------------------- Méthodes publiques

double NormalDistribution::Get ( double value )
{
    int signe ( rand ( ) % 2 == 0 ? 1 : -1 );
    double y ( (double) rand ( ) / RAND_MAX );
    y = sqrt ( y * y ) * _Y_MAX;
    return value * ( 1 + signe * ( s * sqrt ( -2 * log ( y * s * sqrt ( 2 * PI ) ) / log ( 2 ) ) + u ) * normValue );
}

//------------------------------------------------- Surcharge d'opérateurs

//-------------------------------------------- Constructeurs - destructeur
NormalDistribution::NormalDistribution ( double paramSigma, double paramU, double norme )
    : u ( paramU ), s ( paramSigma ), normValue ( norme )
{
    srand ( time ( 0 ) );
    _Y_MAX = 1.0 / ( s * sqrt ( 2 * PI ) );
#ifdef MAP
    cout << "Appel au constructeur de <NormalDistribution> - ";
    cout << "s ( " << s << " ), ";
    cout << "u ( " << u << " ), ";
    cout << "Y_MAX ( " << _Y_MAX << " ), ";
    cout << endl;
#endif
}

NormalDistribution::~NormalDistribution ( )
{
#ifdef MAP
    cout << "Destructeur de <NormalDistribution>" << endl;
#endif
}
//------------------------------------------------------------------ PRIVE

//------------------------------------------------------ Méhodes protégées
